{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# CS-109: Fall 2015  -- Lab 8"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Apache Spark\n",
    "![Alt apache spark](img/spark-logo.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "Apache Spark is an open source cloud computing framework that was original developed in AMPLab at UC Berkley and later donated to Apache Software Foundation. By loading data into cluster's memory's, Spark is able to achieve nearly 100x speed up compared to MapReduce for certain applications."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Finding SparkContext"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`findspark` library enables ipython notebook to interact with SparkContext "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "import findspark\n",
    "findspark.init() \n",
    "\n",
    "import pyspark\n",
    "sc = pyspark.SparkContext()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Example: Estimating $\\pi$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let us start by estimating $\\pi$ using Monte Carlo simulation with Spark.  \n",
    "\n",
    "Imagine that we throw 1 million sand particles into a unit square box.  We obtain fraction of particles that land within the area of under $x^2 + y^2$, and after multiplying this fraction by four, we arrive at a rough approximation of $\\pi$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![Alt estimate Pi](img/estimate_pi.gif)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Function to sample a point\n",
    "def sample(d):  # Ignore d\n",
    "    x = np.random.uniform(0,1); y = np.random.uniform(0,1);\n",
    "    return x*x + y*y < 1."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Pi estimate: 3.1404508\n",
      "Duration: 11.23119 Seconds\n"
     ]
    }
   ],
   "source": [
    "import time\n",
    "N = int(10e6)\n",
    "start = time.time()\n",
    "total = sc.parallelize(range(N)).map(sample).reduce(lambda a,b: a+b)\n",
    "print \"Pi estimate:\", (total / float(N) * 4)\n",
    "print \"Duration: %.5f Seconds\" % (time.time() - start)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Numpy Estimate: 3.14159265359\n"
     ]
    }
   ],
   "source": [
    "print \"Numpy Estimate:\", np.pi"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Our estimate is fairly close to the Numpy's $\\pi$.  However, if we increase the number of samples ($N$), we can achieve even greater accuracy at the cost of run time."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Example: Zipf's Law\n",
    "\n",
    "Named after the American linguist George Kingsley Zipf (1902-1950), Zipf's Law describes an empirical law that describes the phenomenon in the physical and social sciences where many types of data can be approximated by Zipf distribution - a family of discrete power law probability distributions.\n",
    "\n",
    "In linguistics, Zipf's law states that given some text of natural language, the frequency of any word is inversely proportional to its rank in the frequency table.  The most frequent word will occur approximately twice as often as the second most frequent word, three times as often as the third most frequent word, etc. \n",
    "\n",
    "Zipf's law then predicts that frequency of element of rank $k$ can be approximated by,\n",
    "\n",
    "$$f(k; s, N) = \\frac{1/k^s}{\\sum_{n=1}^N (1/n^s)}$$\n",
    "\n",
    "where $N$ is the number of elements, and $s$ is the value of the exponent characterizing the distribution.  Normally, $s$ is defined to be $1$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "f = lambda rank,elements,s: 1/(np.sum(1./(np.arange(1,elements+1)**s)) * rank**s)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtwAAAGMCAYAAADpz3UDAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl8VOXd///3mSXLJJOQkGQCIovRKshS3KpIobcBbiWK\nIkhp3Vpxq0v6dSm9lXLXb0Gs/ir2h7cbctcK2qK1CNhgiwYNanEHohJEUaKRbJBAQvbMzPePJEOG\nnKzMZCbJ6/l48CAzc64zn+Dl5H2uXOe6DK/X6xUAAACAoLCEugAAAACgPyNwAwAAAEFE4AYAAACC\niMANAAAABBGBGwAAAAgiAjcAAAAQRARuAAPeDTfcoPXr13fp2AMHDujKK6/UGWecoQcffFBPPfWU\nfvOb3wS5wvZdfPHF+uCDDwJyro0bN2rBggW+x6eddpq+/fbbgJxbkiZOnKiCgoKAnQ8A+gqDdbgB\n9GcbN27Ub3/72zbP19TUKDMzU7fccku3zvfYY4/p888/14oVKwJVoqmCggJNmzZN0dHRkiSHw6Fx\n48bpmmuu0aRJk3p0rl27dsli6fo4y2mnnabXXntNJ554YrfeT5KuvvpqzZo1S1dccUW323bXBRdc\noIMHD8piscjhcGjKlClavHixHA6Hrr76an3wwQdav369TjvtNF+bW2+9VdnZ2VqzZo3OPvtsPfro\no3ryyScVERHhO+a2227zuwABgJ5ihBtAvzZr1ixt377d78+9996rpKQkzZs3r9vn279/v0466aQg\nVGruo48+0vbt27Vx40ZNmjRJt956q15++eUenauj8RW3293TEsPCk08+qe3bt2vdunX69NNP9cQT\nT/heGzVqlDZs2OB7XF5erh07dmjw4MG+5wzDUEZGhl8/IWwDCBQCN4ABZdeuXVq2bJkeeeQRJSUl\nSWoajf3b3/4mSVq3bp3mz5+vJUuW6KyzztJFF12kbdu2SZL+67/+Sxs2bNCqVat0xhlnaNu2bXr0\n0Uf1q1/9ynf+zMxMTZ48WWeddZauuuoqffnll77X/uu//kv/9//+X910000644wzNG/evC5P2Rg8\neLCuueYa3X777frDH/7ge/6CCy7w1Zebm6vLL79cZ555ps4//3w9+OCDkqSrrrpKknTWWWfpjDPO\n0I4dO3zf5wMPPKAf/OAHevTRR7Vu3Tr99Kc/9XvfN998U9OmTdO5556rhx56yBfaj/2+CwoKdNpp\np8ntduuRRx7RRx99pCVLlmjixIlaunSpJP8pKpWVlVq4cKHOO+88XXDBBXriiSd85163bp1+8pOf\n6MEHH9Q555yj9PR0bd26tUv/Ti6XS5MnT9YXX3zhe+7iiy/Wpk2bfOfPysrS9OnTZbPZfMd4vd4O\nL0gA4HgQuAEMGBUVFcrMzNStt96qs88+2+81wzB8X3/yyScaPny43nvvPd1+++26/fbbVVFRod//\n/ve65JJLdMMNN+jjjz/Weeed59dOkn70ox9p8+bN2rZtm8aMGaO7777b7/VNmzbptttu0wcffKDh\nw4frkUce6db3MH36dB08eFBfffVVm9fuv/9+/exnP9NHH32k119/XRdeeKEk6fnnn5fUNFr+8ccf\n6/vf/77f97lt2zb94he/MH2/119/XevWrdPLL7+s7OxsvfTSS23+vVozDEN33HGHzjzzTP33f/+3\ntm/fbjrHfcmSJaqqqvJN61i/fr3+/ve/+17/5JNPdNJJJ+m9997T9ddfr0WLFnXp36ewsFBvvfWW\nxowZ43suJSVFJ598st566y1J0oYNG3TZZZd16XwAEAgEbgADgtfr1cKFC3Xqqafq+uuv7/DYxMRE\nXXvttbJarZo5c6ZGjRqlN954w+9cZl9L0uWXXy6HwyG73a7bbrtNu3fv1pEjRyQ1hdEZM2Zo3Lhx\nslqtuuSSS5SXl9et7yMlJUWSdPjw4Tav2e125efnq6ysTNHR0ZowYYJpja3PdeWVV8pisSgyMtL0\nmBtuuEFxcXEaMmSIrr32WmVlZXV4ztbaO8btdmvTpk2688475XA4dMIJJ+i6667zm/YxdOhQXXHF\nFTIMQ5dddplKS0t18ODBdt/rlltu0dlnn60rr7xS55xzjm6++Wa/1y+99FJt2LBBe/fuVUVFhe+i\no7VXX31VZ599ts4++2ydc845Ki0t7fR7BICusHV+CAD0fU8//bS++uorrVu3rtNjXS6X3+OhQ4d2\nKXy1TKf417/+pbKyMt8NiuXl5YqNjZUkv3nDUVFRqq6u7s63oeLiYklSfHx8m9fuv/9+rVixQjNn\nztSwYcN022236Uc/+lG750pNTe30/YYMGeL7eujQoSopKelyre2NgpeXl6uxsVEnnHCC3/u0PnfL\ndB9JvhtHq6ur/f79Wnv88cd13nnntVvHjBkz9OCDD2rQoEHtjm7PnDlTDz30UMffFAD0ACPcAPq9\n9957T08++aRWrFjhC74daQm1Lfbv3+8bWe7IK6+8oi1btujPf/6zPvroI2VnZ/e45va89tprSkpK\nMr1xc8SIEXr44Yf17rvv6oYbblBmZqZqa2s7nP7Rmf379/t93XIxEh0drdraWt9rBw4c6PK5ExIS\nZLPZ9N133/meKywsbHOhE0hRUVGaMmWK1q5dq0svvdT0GOZwAwgWAjeAfq2kpER33nmnFi1a5Lcs\nXEfKysq0evVqNTQ06NVXX9VXX32lqVOnSuo4lFVXVysiIkLx8fGqrq7W8uXL/V7vSaBraXPgwAE9\n99xzeuyxx3TnnXeaHrthwwaVlZVJkpxOpwzDkMViUWJioiwWi7755ptuv/+f/vQnVVRUqLCwUGvW\nrNHMmTMlSWPGjNEHH3ygwsJCVVZW6qmnnvJrl5SU1O4NoVarVRdddJEeeeQRVVVV6bvvvtOf//xn\nzZo1q9v1dccdd9yhNWvWaOjQoUF9HwA4FlNKAPRrL774og4ePKilS5f6Vstocemll+q+++5r02b8\n+PHKz8/Xeeedp6SkJD366KO+KRyGYfiN3rZ+fNlll+ntt9/WlClTNGjQIGVmZuqFF14wPbb1cx05\n66yzJDWNKI8bN04rVqzQ5MmTTY99++239eCDD6qmpkbDhg3T8uXLfetK33zzzfrJT34it9utp59+\nut1ajn0uPT1dl19+uSorK3X55Zdrzpw5kqRJkyZp5syZmjVrlhITE3X99dfrzTff9LW75ppr9Otf\n/1p//etfdemll7a56XHx4sVasmSJpk2bpsjISM2bN8937p78O3VFSkpKu7+pMHtPAAiUoG98s3Xr\nVi1btkwej0dz587VjTfe6Pf63r17de+992rXrl264447dN1110lq+vXiwoULVVZWJsMwNG/ePF1z\nzTXBLBUAtG7dOr300kv6y1/+EupSAAD9RFBHuN1ut5YsWaJnnnlGLpdLc+fOVXp6utLS0nzHJCQk\n6De/+Y1ef/11/8JsNt17770aPXq0qqqqdPnll+v888/3awsAAACEu6DO4c7NzdXw4cM1bNgw2e12\nZWRktLmJKDExUePGjZPdbvd7Pjk5WaNHj5YkxcTEKC0trVt3xwNATzC1AAAQaEEN3MXFxX5LSrlc\nrjZ3/3dFQUGB8vLyNH78+ECWBwBtzJ4927dRDAAAgRDUwB2IUaKqqiplZmZq0aJFiomJCUBVAAAA\n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\nnwa7Ba8zis9gAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fc35da3f8d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ranks = np.arange(1,51)\n",
    "N = 5000\n",
    "s = 1.0\n",
    "\n",
    "plt.figure(figsize=(12,6))\n",
    "plt.plot(ranks,f(ranks,N,s), 'o-')\n",
    "plt.title(\"Zipfian Distribution PMF\")\n",
    "plt.xlabel(\"k: rank\")\n",
    "plt.ylabel(\"p: probability\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Although primarily studied in ranking of words in natural language, Zipf's law has been found to be true in the ranking of cities by population size (Gabaix 1999) and the ranking of US firms (Axtell 2001). "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### wordcount.org"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "http://www.wordcount.org/main.php"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Developed in 2003 by Jonathan Harris, wordcount.org keeps count of over 100 million collection of words from the <a href=\"http://www.natcorp.ox.ac.uk/\">British National Corpus</a> (BNC), which includes spoken and written sources. It keeps track of words that occurs at least twice in the BNC."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"img/wordcountorg.png\" width=\"600px\">"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Word Count from Project Gutenberg Texts"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "In this example, we will attempt to replicate the results from wordcount.org by processing a large volume of sample texts.  We'll use Spark to read the text data, process the texts, and examine the total number of unique words.  \n",
    "\n",
    "We will sample 16 texts from [Project Gutenberg](https://www.gutenberg.org/ \"Title\").  We should note that while these texts represent some of the most popular classic English literature, many of them are over 100 years old and therefore may not be representative of lexicon of English language today."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['adventures_of_huckleberry_finn.txt',\n",
       " 'adventures_of_sherlock_holmes.txt',\n",
       " 'adventures_of_tom_sawyer.txt',\n",
       " 'alices_adventures_in_wonderland.txt',\n",
       " 'autobiography_of_ben_franklin.txt',\n",
       " 'dracula.txt',\n",
       " 'emma.txt',\n",
       " 'frankenstein.txt',\n",
       " 'great_expectations.txt',\n",
       " 'iliad.txt',\n",
       " 'leviathan.txt',\n",
       " 'moby_dick.txt',\n",
       " 'peter_pan.txt',\n",
       " 'pride_and_prejudice.txt',\n",
       " 'scarlet_letter.txt',\n",
       " 'tale_of_two_cities.txt']"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import os\n",
    "os.listdir('data')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Parsing a String\n",
    "\n",
    "We'll begin by writing a function that will parse long string of text into individual words.  This function must also eliminate any punctuation marks including \",\" and \".\".  In addition, all the words must be in lowercase characters such that, for example, \"Bank\" and \"bank\" are not captured as separate words."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "import re\n",
    "\n",
    "def parsewords(sentence):\n",
    "    # Convert all non-alphanumeric characters into empty string\n",
    "    sentence_clean = re.sub(r'([^A-Za-z0-9\\s+])', '', sentence)  \n",
    "    words = sentence_clean.split(' ')\n",
    "    # Convert to lowercase and eliminate empty string words\n",
    "    return [word.lower() for word in words if word != ''] "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's test out this function using a test string."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "sample_sentence = \"Alice was beginning to get very tired of sitting by her sister on the \\\n",
    "bank, and of having nothing to do: once or twice she had peeped into the \\\n",
    "book her sister was reading, but it had no pictures or conversations in \\\n",
    "it, 'and what is the use of a book,' thought Alice 'without pictures or \\\n",
    "conversations?'\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false,
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['alice',\n",
       " 'was',\n",
       " 'beginning',\n",
       " 'to',\n",
       " 'get',\n",
       " 'very',\n",
       " 'tired',\n",
       " 'of',\n",
       " 'sitting',\n",
       " 'by',\n",
       " 'her',\n",
       " 'sister',\n",
       " 'on',\n",
       " 'the',\n",
       " 'bank',\n",
       " 'and',\n",
       " 'of',\n",
       " 'having',\n",
       " 'nothing',\n",
       " 'to']"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "parsewords(sample_sentence)[:20]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Load Text Files"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next, we'll load up the text files and create a text file RDD.  Spark provides `textFile` method to read a text file and return it as a RDD."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "textsRDD = sc.textFile('data/'+os.listdir('data')[0])\n",
    "for txt in os.listdir('data')[1:]:\n",
    "    file_dir = 'data/' + txt\n",
    "    textRDD = sc.textFile(file_dir)\n",
    "    textsRDD = textsRDD.union(textRDD)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[u'',\n",
       " u'',\n",
       " u'The Project Gutenberg EBook of Adventures of Huckleberry Finn, Complete',\n",
       " u'by Mark Twain (Samuel Clemens)',\n",
       " u'',\n",
       " u'This eBook is for the use of anyone anywhere at no cost and with almost',\n",
       " u'no restrictions whatsoever. You may copy it, give it away or re-use',\n",
       " u'it under the terms of the Project Gutenberg License included with this',\n",
       " u'eBook or online at www.gutenberg.net',\n",
       " u'',\n",
       " u'Title: Adventures of Huckleberry Finn, Complete',\n",
       " u'',\n",
       " u'Author: Mark Twain (Samuel Clemens)',\n",
       " u'',\n",
       " u'Release Date: August 20, 2006 [EBook #76]',\n",
       " u'',\n",
       " u'Last Updated: April 18, 2015]',\n",
       " u'',\n",
       " u'Language: English',\n",
       " u'']"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "textsRDD.take(20)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We have a a RDD that is a collection of strings.  We'll start by mapping the function `parsewords` to each of the line of strings in `textsRDD`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[[],\n",
       " [],\n",
       " [u'the',\n",
       "  u'project',\n",
       "  u'gutenberg',\n",
       "  u'ebook',\n",
       "  u'of',\n",
       "  u'adventures',\n",
       "  u'of',\n",
       "  u'huckleberry',\n",
       "  u'finn',\n",
       "  u'complete'],\n",
       " [u'by', u'mark', u'twain', u'samuel', u'clemens'],\n",
       " []]"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "textsRDD.map(parsewords).take(5)  # Not quite what we want!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Unfortunately, the result of mapping `parsewords` to `textsRDD` did not yield the result that we want. \n",
    "\n",
    "RDD has `flatMap` method that will map a function that has been passed in as a parameter to elements of the RDD and flatten the result.  We'll use `flatMap` method and apply `parsewords` function to create a new RDD of words. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[u'the',\n",
       " u'project',\n",
       " u'gutenberg',\n",
       " u'ebook',\n",
       " u'of',\n",
       " u'adventures',\n",
       " u'of',\n",
       " u'huckleberry',\n",
       " u'finn',\n",
       " u'complete',\n",
       " u'by',\n",
       " u'mark',\n",
       " u'twain',\n",
       " u'samuel',\n",
       " u'clemens',\n",
       " u'this',\n",
       " u'ebook',\n",
       " u'is',\n",
       " u'for',\n",
       " u'the']"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "wordRDD = textsRDD.flatMap(parsewords)\n",
    "wordRDD.take(20)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now that we have an RDD of words, let's examine how many words are in our sample texts."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total Word Count: 2018318\n"
     ]
    }
   ],
   "source": [
    "# Total Number of Words in our Sample\n",
    "total_count = wordRDD.count()\n",
    "print \"Total Word Count:\", total_count"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We will use `map` method of the RDD to convert each occurance of word into a (key,value) pair and create a new RDD called `wordPairRDD`.  If you saw the word count example in MapReduce, you should be familiar with this pattern. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": false,
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[(u'the', 1),\n",
       " (u'project', 1),\n",
       " (u'gutenberg', 1),\n",
       " (u'ebook', 1),\n",
       " (u'of', 1),\n",
       " (u'adventures', 1),\n",
       " (u'of', 1),\n",
       " (u'huckleberry', 1),\n",
       " (u'finn', 1),\n",
       " (u'complete', 1),\n",
       " (u'by', 1),\n",
       " (u'mark', 1),\n",
       " (u'twain', 1),\n",
       " (u'samuel', 1),\n",
       " (u'clemens', 1),\n",
       " (u'this', 1),\n",
       " (u'ebook', 1),\n",
       " (u'is', 1),\n",
       " (u'for', 1),\n",
       " (u'the', 1)]"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Convert individual word into a pair of (word,1) tuple \n",
    "wordPairRDD = wordRDD.map(lambda word: (word,1))\n",
    "wordPairRDD.take(20)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We have converted wordRDD into a a new RDD that holds each instance of word into a (key,value) pair.  Let's use reduceByKey method to sum up the counts and create a new RDD, `wordCountRDD`. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[(u'aided', 11),\n",
       " (u'fawn', 3),\n",
       " (u'disgracewhen', 1),\n",
       " (u'wormlike', 1),\n",
       " (u'callianira', 1),\n",
       " (u'drinkin', 2),\n",
       " (u'scufflings', 1),\n",
       " (u'jobbing', 1),\n",
       " (u'alternating', 6),\n",
       " (u'pokers', 1),\n",
       " (u'jests', 4),\n",
       " (u'em', 209),\n",
       " (u'tickets', 20),\n",
       " (u'summes', 2),\n",
       " (u'enjoy', 90),\n",
       " (u'achievements', 5),\n",
       " (u'smeared', 7),\n",
       " (u'mewith', 1),\n",
       " (u'even', 1510),\n",
       " (u'observantly', 1)]"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "wordCountRDD = wordPairRDD.reduceByKey(lambda x,y: x+y)\n",
    "wordCountRDD.take(20)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total Unique Words: 56238\n"
     ]
    }
   ],
   "source": [
    "# Number of Unique Words\n",
    "unique_count = wordCountRDD.count()\n",
    "print \"Total Unique Words:\", unique_count"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Since `wordCountRDD` contains unique words and their counts, we sort them by `takeOrdered` method of RDD specifying the the ordering function to order by the values in (key,value) pairs.  We will only select top 50 words."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[(u'the', 112921),\n",
       " (u'and', 70565),\n",
       " (u'of', 60234),\n",
       " (u'to', 55424),\n",
       " (u'a', 39794),\n",
       " (u'i', 33960),\n",
       " (u'in', 33750),\n",
       " (u'that', 27203),\n",
       " (u'it', 25073),\n",
       " (u'was', 22650),\n",
       " (u'he', 22172),\n",
       " (u'his', 20604),\n",
       " (u'with', 17034),\n",
       " (u'as', 16683),\n",
       " (u'is', 15833),\n",
       " (u'for', 15827),\n",
       " (u'you', 15700),\n",
       " (u'but', 14447),\n",
       " (u'not', 14256),\n",
       " (u'be', 13380),\n",
       " (u'had', 13236),\n",
       " (u'her', 12093),\n",
       " (u'at', 11588),\n",
       " (u'my', 11345),\n",
       " (u'on', 11230),\n",
       " (u'by', 10891),\n",
       " (u'all', 10465),\n",
       " (u'have', 9821),\n",
       " (u'him', 9803),\n",
       " (u'she', 9718),\n",
       " (u'me', 9365),\n",
       " (u'so', 9334),\n",
       " (u'this', 9273),\n",
       " (u'from', 8804),\n",
       " (u'or', 8600),\n",
       " (u'they', 8569),\n",
       " (u'which', 8557),\n",
       " (u'no', 7026),\n",
       " (u'there', 7007),\n",
       " (u'we', 6759),\n",
       " (u'were', 6698),\n",
       " (u'said', 6646),\n",
       " (u'when', 6451),\n",
       " (u'if', 6177),\n",
       " (u'one', 6137),\n",
       " (u'their', 6088),\n",
       " (u'are', 5984),\n",
       " (u'them', 5749),\n",
       " (u'what', 5687),\n",
       " (u'would', 5246)]"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Select Top 50 words in descending order of frequency\n",
    "top50Words = wordCountRDD.takeOrdered(50, key=lambda x: -x[1]) # Use '-' to sort in descending order\n",
    "top50Words"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Chaining\n",
    "\n",
    "<img src=\"img/word_count_RDD_transformation.jpeg\" width=\"600px\">\n",
    "\n",
    "Although we have performed each transformation in separate steps, Spark enables us to perform these four steps in one line of code by chaining them together.\n",
    "\n",
    "Although Python is strict about indentation, we use a convenient trick of wrapping a chain of RDD methods inside a parenthesis.  This trick enables us to chain multiple RDD methods in several lines of code, which enhances readability of your code. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "top50Words = (textsRDD.flatMap(parsewords)\n",
    "                      .map(lambda word: (word,1))\n",
    "                      .reduceByKey(lambda x,y: x+y)\n",
    "                      .takeOrdered(50, key=lambda x: -x[1]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n26ysLMXEdFFoaKj++98ltraHDiVr+PCBevnl19W6ddtyrMJU5NUdO7brwQf/ke/8kCHD9cADE8qx\nDhTFOcMPmx4AAADgojZt2un8+fPas+dHtWjRUpK0Z8+P8vWtqqSkJJ08eVLVq1eXlBtCvLy81Lx5\nZKnGys7OtgWs0nj33Q/l5+dnO65UqXK+NlartdT3R9GcbsMDiRedAgAA4C9169ZTQECgduzYbju3\nY8d2tW3bTk2bNtX339ufb9ashTw9PWWxWPTyy3PUr18vdet2i+655y7t3r3Trm1ERIS++WaLxo69\nQ1273qRvv92q8+fP67nnnlbPnreqX79eeuedRSWu1d/fX/7+NWx/fHx8lJDwqXr2vFXffLNFo0YN\nUdeuNykp6YAsFotee+0VDRwYqx49Omns2Du0bdtWu/tt3fq1RowYpG7dbtF9943V2rVr1LlzO6Vc\n/H05796X2rFjuzp3bqfTp0/Zzv3wwy7df/849ejRSQMG9NbTTz+tzMyztuv33z9Oc+bM0vz589Sn\nTw/17RutefNelmEYtjZZWVmaP3+e4uL6qnnz5hoy5G9avnypJGno0P56//137epITj6ozp3b6bff\nfinx16+snDP8pDLzAwAAgL+0bt1G33//ne34+++/U6tWbdW+fXvt2HH5+TaSpNdee0UbNqzTE09M\n1eLF7+mGGxpq4sTxOn78mN2933jjVY0bd5+WLFmhxo2b6dVXX9L27ds0Y8ZsvfTSa/r111+0a9eO\nEtV5aVi4lMVyQW+//ZYee2yy3ntvuczmYD3xxBPavXunnnrqOb3zzjLFxPTRY489pN9//02SlJqa\nokmTHlb79jdp8eIlGjRoqF5//RWZTEUvwbvcvn2/a8KEB9S5c5T+97+leu652dq7d69mzHjWrt26\ndavl4eGhN95YpIceelTLli3R+vVrbdenT39K//d/CXrggQlavXq1nnzyGfn5VZMk9enTXwkJq+zu\nFx+/So0ahatRo/ArqrcsnDP8MPMDAACAS7Rq1UY//rhb2dnZunDhgn788Qe1atVG7du3t838JCUd\nUHr6cbVp007nzp3TJ5+s0D//OV433XSL6tWrr0ceeUI1atTQRx99aHfv0aPHqV27DgoJqSUvLy8l\nJKzSP/85Xu3addQNN4Rp0qSnZDKV7NfquLh+6tnzVtuf1NTc32utVqseeuhRNWvWQnXq1NWJE+lK\n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\ntVrtOlY4OZdpwYIFlJeX89Zbb5GZmcn06dP573//S1BQEHv37mXlypVERkZe04N28OBBVq1axdKl\nS/Hw8GDatGmMGTOGgQMHEh8fz5o1a2jWrNk1cVlZWcybN4/JkyfTvn179Ho9fn5+9O7dm3PnzpGU\nlMTQoUPr7aW02Wx88sknDBs2jDvvvJM9e/Ywf/584uLiCAwMZNmyZYwYMaLWM9PVP39PT09SUlLo\n06ePq8Hct29f7rnnHg4cOMCqVasYN26cq6Hl5uZGfn4+mzZtwtPTk6ioKFcv09XbSm2uHrHgfN6y\nZUvOnz/Pxx9/TMuWLWnevHmdCWBubi579+7l9OnTxMTEYDQaKSsrY/DgwUilUpRKJe3ataNjx46Y\nzWbOnj3L0KFD+fTTT/Hw8GDevHn06tWLUaNGYTAYWL16NUlJSQwbNqxBPe3OkTAxMTHMmTOHb775\nhi5durB06VLuuusuRo4cSUJCAnv27KnR6/TKK6/wwAMP8Oijj7JkyRKSk5N57733UCgUfPzxx1RU\nVLhOetTn/fffZ8yYMfTv359Zs2ZRXFzM22+/DVQmCZcvXyYyMtL1/Xa2qaZPn86dd97JM888g1ar\npW3btgwcOJBLly6xZcsWzpw5Q9u2beu8Fqj6iaLY2FhGjhzpGpa+evVqHnjgAcrKyti/fz+BgYFM\nmTKFkydPsnz5cpKTk+nUqRM6na7GNVcNYbVamTp1KhMmTOCee+5h5syZrl4Ui8XCzJkzKS8vp1Wr\nVnXO0zmc+I033nD1Cg4aNMjVU1pXfebPn09wcDDjx493tXU/+ugj3NzcOHDgAL/88guRkZENGpqf\nlJSEXC7n8ccfd7UthwwZQkxMDD/99BMnTpygW7duNRIg52Un5eXlxMTEIJPJOHnyJGVlZQQGBro6\nE7Zu3UpOTg4hISE1yqze27Zjxw7279/Pm2++6Wrrt23blmHDhrF582bOnj2Lu7s7d911V4M+l1s6\n+XHKzs5m06ZNjBs3jkmTJrl21FB5Nu/o0aNMnDixzg2nqKiInTt30qlTJyIjI4HKD8XPz4+SkhJU\nKhUDBw6kZ8+errNqUHmwHDNmDKNHj6Z9+/asXLmSdevWYbVacXNzw8PDo9azjDk5Ofz8888MHz7c\nlZ07x/AXFhZy4MABRo0adU0DWCqVEhIS4urx2LlzJwB9+/ZFoVAwa9YsIiMjXcvQUD4+PgwbNqzW\n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\nPHV9joqKCrK1tSUfHx8iImpubqaWlhZW5vz589t9/8CBA6SmpkZTpkyhXbt2UWxsLM/v7969o7dv\n33avM/7NePfuHe3bt4+mT59OLi4uFBwc3KP3V61aRVu3biUiooSEBDIyMqKkpCT6/fffSVNTk0xN\nTenWrVvdKqupqYk+fPjQ7brHjRtH3t7eRETk6+tLlpaWtGvXLtLT0yN7e3vy8vKilJQUKigoICKi\nqqoq0tLSorCwMEpNTaWjR4/SkiVLyNnZmdzd3endu3ft1tPc3Mz+zsjIoPj4eMrLyyMioqioKFq4\ncCFNmTKFtm3bRvfu3eu0zYWFheTl5UWqqqpkbGxM8fHx7LfGxkb6+PEj+3d1dTX7+/Dhw7R8+XIi\nIkpLSyMDAwN6+/YtNTQ00NixY0lVVZU8PDy61W/cmM+aNYsWLVpEPj4+PPVyuHXrFtXW1hIRUVJS\nEllYWLTpo8zMTDIwMCA3N7cu6718+TKNGzeOpk2bRqtWrSIHBwcyMjJi6689cH3/6tUr8vPzo/z8\n/DbPxMfHk7m5Oc2bN4+qqqraLefDhw+0dOlS2rt3LxERNTQ0sN+io6NpzJgxbJ6kpKTQ69eviYio\nsrKSNDQ06Pr165Sbm0vPnz8nb29vMjQ0pF9++aXT7+X2p4qKCrKxsaF58+bR/v37SVVVlRwcHOjM\nmTNUXV3NM79ag9uLtm7dSq6urkRE9PbtW9LV1aVHjx4REVFkZCSFhYW1Gb+mpiaKiIigS5cuERHR\nr7/+Sps3b6aWlhb6+PEj7dixg+Lj43n64XMUFRWRpqYmbd++nbZv306mpqbk4OBA3t7elJ2dzdrd\n3NxMpaWlZGFhwdZ6aWkp6enpUWJiIisvPz+f9u3bR6NHj6bo6Ggi+tdZEBERQTt37qSnT58SEdH8\n+fPpypUr7N2amhq6dOkSWVlZUWBgIE///OMf/yALCwv2bGdrxcLCglRVVWn//v0dfnd7KCsrI1dX\nV1qzZg377vfv31NLSwubc2lpaVRdXc3adf/+fZozZw5pa2vT2rVrKTY2lt6/f9/t+oyNjWn69Om0\nePFi0tLSIgcHhzZnTXtYuHAhbd++naqqqignJ4cWL15MY8eOpd9//53i4uKorq6OiP7VfxyOHz9O\n8+fPJ6JPY79v3z4yMTGhZcuW0bhx4ygmJqZ7nfU/aGpqorKyMgoICCBzc3MyNjZmY9cZuHadPXuW\nFi5cSGZmZrR161aevfJzfOlZ/nl7iYgOHjxIkydPppiYGHr9+jWpqqrSjRs3iIiovr6e550PHz6Q\nuro6RUZGtikvICCAHBwcqK6ujtXNtSk3N5ftpe/evev0XCotLe203e0hMDCQnJ2d6fTp010+W1xc\nTJWVlezfu3fvJnt7ewoNDWV90l3cu3ePxo0bx+SA9tDRfkdE9PDhQ/rjjz9o5syZ5OLiQmfPnmVn\nUFfg+tbV1ZUWLFhAQUFBtGHDBtLU1GR7O4fOZMueyiGenp5kbGxM8+fPp3HjxpGOjg7t3buXp0+7\n024i3nOpqKiIvL29adGiReTs7EybN2/maferV69IVVWVVFVV6ciRI+wM6Kx/O8K7d+9oxowZpKur\nSw4ODhQVFdXu2HdU9pIlS+jQoUNERHThwgWytramkpIS8vT0JG1tbTI3N6eoqKhOv51DbGwsbd26\nlWbMmEGLFi2igICANuuup/iPiPnJzMzExIkToaioyPw/lZWVsWbNGqipqWHq1KlQUVHB5cuX4efn\nh+rqaujp6bUxVdP/MMnU1dVhx44d+Oc//4nvv/8ezs7OGDFiBMvr09jYCFlZ2TY3RiKCkJAQCgsL\nceTIEQgLC0NNTQ3Nzc0oLy/H3r17YW1t3W7wspiYGDQ1NRnNaHp6OoqKiiAlJQU5OTmMHz+eBSb/\np4OjMdTR0UFycjLq6+u7HUjGxX+MGTMGqqqqWLNmDSZOnIjp06djyJAhyMjIgIODQ4fuX5+jPaKG\njnDr1i2kp6djx44dqK+vx5o1a/D7779j0aJFSE9PR35+PmOUefbsGUs+KioqimXLlqF///7MBae6\nuhopKSkICgrCkCFDeMgFgH/lc/Ly8sKBAwcQEBCAhw8f4tGjRxg7dixcXFwY8xuAdvvv4cOHLJmh\nhIQEbt++jVGjRmH//v2MtlhOTg4CAgKIjIzEwYMHWbxZV7ToxcXFWLduHRwdHb+IFh1AGzPyiRMn\n4OHhwbQ8AgICOH/+PNTU1KCsrMyCeeXl5VFVVYWioiJYW1t3Wv+SJUvw3XffYefOnbCzs8OoUaOY\n5r4j2lJOK3Tq1CkcOnQIpaWlzDWO00LS/wS3rl69usM4ue4GEktKSmL16tV4+vQp+Pn58fLlS/Dz\n82P58uVsH9HW1oaSkhICAgI6Zari2r9p0yZISkri1KlTGDJkCC5cuABdXV34+PggJycHIiIibZLw\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f61369a8f10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "words = list()\n",
    "counts = list()\n",
    "for pair in top50Words:\n",
    "    words.append(pair[0])\n",
    "    counts.append(pair[1])\n",
    "\n",
    "plt.figure(figsize=(14,6))\n",
    "plt.bar(range(1,51), np.array(counts) / float(total_count), label=\"Word Frequency\", align='center')\n",
    "plt.plot(ranks, f(ranks,N,s), c='r', label=\"$f(k,s,N)$\")\n",
    "plt.xticks(range(1,51), words[:50], rotation=60, fontsize=14)\n",
    "plt.title(\"Frequency of Top 50 Words\",fontsize=18)\n",
    "plt.legend(fontsize=14)\n",
    "plt.xlim(0.5,50.5)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Although not exact, the word frequency from our sample of texts follows the Zipf distribution closely.  We also see that in our sample texts, \"and\" is the second most frequently occuring word.  This is in contrast to the word frequency ordering of BNC in which \"of\" is ranked second and \"and\" is ranked third.    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For those who are proficient in another language besides English, we encourage you to perform this exercise in another language and share the result with your classmates on Piazza.  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "For more examples of Spark in Python, please take a look at various examples in [Apache Spark official github repository](https://github.com/apache/spark/tree/master/examples/src/main/python).  \n",
    "\n",
    "For detailed discussions about transformations and actions in Spark RDD instance, read through [Apache Spark's official pyspark documentation](http://spark.apache.org/docs/latest/api/python/pyspark.html)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
